from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.sql import select
from sqlalchemy.orm import sessionmaker
"""
        Crea la conexion con la base de datos 
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
        @date 06/04/2013
            
"""  
engine = create_engine('postgresql://postgres:is22013@localhost:5432/is2db')

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
"""
        Clase que define la tabla usuarios
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""
class Usuarios(Base):
    __tablename__ = 'usuarios'
    idusuario = Column(Integer, primary_key=True)  
    usuario = Column(String(50), unique=True)
    nombres = Column(String(50))
    apellidos = Column(String(50))
    password = Column(String(50))
    documento = Column(String(30))
    email = Column(String(30))
    telefono = Column(String(30))
    sesion = Column(String(30))
    
    relationship("UsuariosRoles") 
    
    """
    Se definen los parametros a ser utilizados
            @param usuario: usuario
            @param nombres
            @type nombres: string
            @param password
            @type passwd: string
            @param documento
            @type nombres: string
            @param email
            @type nombres: string
            @param telefono
            @param sesion
            @type user: string
            @param passwd: password
           
    """
    def __init__(self, usuario, nombres, apellidos, password, documento, email, telefono, sesion):
        self.usuario = usuario
        self.nombres = nombres
        self.apellidos = apellidos
        self.password = password
        self.documento = documento
        self.email = email
        self.telefono = telefono
        self.sesion = sesion
        """
        Clase que define la tabla Roles
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""
class Roles(Base):
    __tablename__ = 'roles'
    idrol = Column(Integer, primary_key=True)  
    nombre = Column(String(50))
    descripcion = Column(String(50))
    estado = Column(Integer)
    abreviacion = Column(String(50))
    
    rolespermisos = relationship("RolesPermisos")   
    usuariosroles = relationship("UsuariosRoles")
    
    def __init__(self, nombre, descripcion, estado, abreviacion):
        self.nombre = nombre
        self.descripcion = descripcion
        self.estado = estado
        self.abreviacion = abreviacion
"""
        Clase que define la tabla PErmisos
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""     
class Permisos(Base):
    __tablename__ = 'permisos'
    idpermiso = Column(Integer, primary_key=True)  
    nombre = Column(String(50))
    descripcion = Column(String(50))
    
    def __init__(self, nombre, descripcion):
        self.nombre = nombre
        self.descripcion = descripcion
"""
        Clase que define la tabla RolesPermisos
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""          
class RolesPermisos(Base):
    __tablename__ = 'rolespermisos'
    idrolpermiso = Column(Integer, primary_key=True)  
    idrol = Column(Integer, ForeignKey('roles.idrol'))
    idpermiso = Column(Integer, ForeignKey('permisos.idpermiso'))
    estado = Column(Integer)  
    
	
    
    def __init__(self, idrol, idpermiso, estado):
        self.idrol = idrol
        self.idpermiso = idpermiso
        self.estado = estado
"""
        Clase que define la tabla UsuarioRoles
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""          
class UsuariosRoles(Base):
    __tablename__ = 'usuariosroles'
    idusuariorol = Column(Integer, primary_key=True)  
    idrol = Column(Integer, ForeignKey('roles.idrol'))
    idusuario = Column(Integer, ForeignKey('usuarios.idusuario'))
    estado = Column(Integer)
    
    def __init__(self, idrol, idusuario, estado):
        self.idrol = idrol
        self.idusuario = idusuario
        self.estado = estado
        
            
Base.metadata.create_all(engine)  
"""
        Crea una sesion con la base de datos para que pueda realizar las operaciones correspondientes
        @authors: U{Cristian Aceval<cristian.aceval@gmail.com>}, U{Victor Franco<victorfranco90@gmail.com>}, U{Jean Salcedo<jloncha@gmail.com>}
        @organization: U{PhetaManager}.
            
"""  
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()   #****mi_sesion = Session()

#usuario=Usuario('Viarda','Lobos','12345')
#session.add(usuario)
#session.commit()

#user= session.query(Usuario).filter_by(apellido='Lobos').first()
#print user.nombre